package main

import "fmt"

/*
1 定义一个函数
2.实现定义函数类型
3.作为参数调用
*/
type myFunc func(int) bool

func main() {
	arr := []int{23, 43, 53, 44, 22, 23, 543, 23, 23}
	fmt.Println("slice = ", arr)
	// 获取切片中奇数元素
	odd := Filter(arr, isodd)
	fmt.Println("奇数元素;", odd)
	Even := Filter(arr, isEven)
	fmt.Println("偶数元素;", Even)
}

//判断整形函数是偶数
func isEven(num int) bool {
	if num%2 == 0 {
		return true
	}
	return false
}
func isodd(num int) bool {
	if num%2 == 0 {
		return false
	}
	return true
}

// 根据函数来处理切片，实现技术分组，返回新的切片
func Filter(arr []int, f myFunc) []int {
	var result []int
	for _, value := range arr {
		if f(value) {
			result = append(result, value)
		}
	}
	return result
}
